## 通过横坐标数据和纵坐标数据画曲线图
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一（替换sans-serif字体）
plt.rcParams['axes.unicode_minus'] = False   # 步骤二（解决坐标轴负数的负号显示问题）

def plot_csv_data(csv_file):
    # 尝试使用GBK编码读取CSV文件
    try:
        data = pd.read_csv(csv_file, encoding='gbk')
    except UnicodeDecodeError:
        # 如果GBK编码失败，尝试使用ISO-8859-1
        data = pd.read_csv(csv_file, encoding='ISO-8859-1')

    # 确保CSV文件有合适的列名，假设它们是 '时间', '横摇(deg)', '纵摇(deg)', '垂荡(m)'
    # 如果列名不同，请修改列名
    time = data.iloc[:, 0]  # 第一列是时间
    yaw = data.iloc[:, 1]   # 第二列是横摇(deg)
    pitch = data.iloc[:, 2] # 第三列是纵摇(deg)
    heave = data.iloc[:, 3] # 第四列是垂荡(m)

    # 创建一个图形和子图
    plt.figure(figsize=(10, 6))

    # 绘制横摇、纵摇、垂荡的曲线
    plt.plot(time, yaw, label='横摇', color='r')
    plt.plot(time, pitch, label='纵摇', color='g')
    plt.plot(time, heave, label='垂荡', color='b')

    # 添加标题和标签
    plt.title('无人艇水动力仿真运动响应')
    plt.xlabel('时间 (s)')
    plt.ylabel('横摇(deg)/纵摇(deg)/垂荡(m)')

    # 添加图例
    plt.legend()

    # 显示图形
    plt.grid(True)
    plt.show()

def plot_csv_data_opposite(csv_file):
    # 尝试使用GBK编码读取CSV文件
    try:
        data = pd.read_csv(csv_file, encoding='gbk')
    except UnicodeDecodeError:
        # 如果GBK编码失败，尝试使用ISO-8859-1
        data = pd.read_csv(csv_file, encoding='ISO-8859-1')

    # 确保CSV文件有合适的列名，假设它们是 '时间', '横摇(deg)', '纵摇(deg)', '垂荡(m)'
    # 如果列名不同，请修改列名
    time = data.iloc[:, 0]  # 第一列是时间
    force = data.iloc[:, 1]   # 第二列是横摇(deg)

    # 创建一个图形和子图
    plt.figure(figsize=(10, 6))

    # 绘制横摇、纵摇、垂荡的曲线
    plt.plot(time, force, label='航行阻力', color='b')

    # 添加标题和标签
    plt.title('无人艇水动力仿真受力响应')
    plt.xlabel('时间 (s)')
    plt.ylabel('航行阻力(N)')

    # 添加图例
    plt.legend()

    # 显示图形
    plt.grid(True)
    plt.show()

if __name__ == "__main__":
    csv_file = r"D:\研究生\科研相关\比赛\多维度无人化海上巡逻系统\国赛报名-智慧城市\演示图片\流体力学仿真\航行阻力.csv"  # 输入CSV文件路径
    plot_csv_data_opposite(csv_file)
